package com.hzw.saas.api.storage;

import java.util.Collection;
import java.util.List;

import com.hzw.saas.api.storage.bo.ResourceBO;
import com.hzw.saas.api.storage.bo.ResourcesBO;
import com.hzw.saas.common.config.query.LogicQuery;
import com.hzw.saas.common.util.enums.ConflictModeEnum;

/**
 * 资源通用接口
 *
 * @author zzl
 * @since 07/02/2021
 */
public interface IResourceService {

    /**
     * 组装基础信息(id -> name)
     *
     * @param resourceBO bo
     */
    void assembleBaseInfo(ResourceBO resourceBO);

    /**
     * 组装基础信息(id -> name)
     *
     * @param resources bo
     */
    void assembleBaseInfo(Collection<? extends ResourceBO> resources);

    /**
     * 获取子目录和文件
     *
     * @param supId     父目录ID
     * @param status    资源状态
     * @param pathLevel 子目录层级；-1：获取所有子目录和文件，1：获取1级子目录和文件信息（默认），2：获取1-2级子目录和文件信息，以此类推
     * @param withFile  是否获取文件,true-获取目录和文件，false-只获取目录
     * @return 子资源列表
     */
    ResourcesBO listSubResources(String supId, LogicQuery<Integer> status, int pathLevel, boolean withFile);

    /**
     * 移动目录和文件
     *
     * @param folderList     目录列表
     * @param fileList       文件列表
     * @param tarSupId       目标父目录
     * @param conflictHandle 目录名冲突解决方案
     */
    void moveResources(List<String> folderList, List<String> fileList, String tarSupId, ConflictModeEnum conflictHandle);

    /**
     * 复制目录和文件
     *
     * @param folderList     目录列表
     * @param fileList       文件列表
     * @param tarSupId       目标父目录
     * @param conflictHandle 目录名冲突解决方案
     */
    void copyResources(List<String> folderList, List<String> fileList, String tarSupId, ConflictModeEnum conflictHandle);

    /**
     * 批量回收目录和文件
     *
     * @param folderList 目录列表
     * @param fileList   文件列表
     */
    void recycleResources(List<String> folderList, List<String> fileList);

    /**
     * 批量恢复目录和文件
     *
     * @param folderList     目录列表
     * @param fileList       文件列表
     * @param tarSupId       目标父目录
     * @param conflictHandle 目录名冲突解决方案
     */
    void restoreResources(List<String> folderList, List<String> fileList, String tarSupId, ConflictModeEnum conflictHandle);

    /**
     * 批量删除目录和文件
     *
     * @param folderList 目录列表
     * @param fileList   文件列表
     */
    void deleteResources(List<String> folderList, List<String> fileList);

}
